The products offered by Apogee Software Inc. are: - Apogee-C, a high-performance C compiler - Apogee-C++, a high-performance C++ compiler - Apogee-FORTRAN 77, a high-performance FORTRAN compiler - Apogee-Fortran 90, a high performance Fortran 90 compiler - SP/MP KAP-C, optimizing C preprocessors - SP/MP KAP-FORTRAN, optimizing FORTRAN preprocessors The Apogee compilers adhere to relevant language and system standards, including those determined by ANSI, ISO, and SPARC International. By working within the open marketplace, we are able to offer products which are compatible with existing products, but which provide exceptional performance. The KAP products are available in either Single Processor (SP) or Multi-Processor versions (MP). The MP versions are capable of automatically detecting parallelism in code and/or arranging for multiple processors to be applied simultaneously to solve the problem. Q. Is it true that Sun's performance announcement of the SPARCstation 5, 10, and 20 did didn't use SunPro compilers? A. That is correct. Sun Microsystems chose to announce performance based on Apogee's compilers, since this substantially boosted their benchmark results. For example, the SPECint92 and SPECfp92 ratings for Apogee's compilers are 20-30% higher than the ratings for the SunPro SC2.0.1 release of compilers running on identical SPARCstation 10's, and 8-12% higher than SunPro's SC3.0 (depending on the exact system configuration). Other SPARC system vendors, including Cray Research Superservers, Solbourne, Tatung, and Axil Workstations, depend on Apogee's compilers to get the most out of their systems. Q. How was Apogee able to achieve this performance? A. Apogee's compilers were developed from a clean sheet of paper over the past few years. This allowed us to design a compiler specifically suited to RISC architectures like SPARC. We were also able to combine state of the art compiler optimization technology with more traditional optimization methods, enabling Apogee's compilers to achieve significantly higher levels of optimization than compilers employing only one general optimization scheme. In addition, we teamed with Kuck & Associates Inc., which has brought its expertise in the supercomputing arena to the SPARC market. By working closely with them, we are able to achieve a symbiosis which allows us to focus on what we do best, while letting them focus on what they do best. The result? A significant performance benefit to you, the customer. Q. In what ways does the RISC architecture affect compiler design? A. The RISC concept has always relied on trading off functionality between the compiler and the hardware. CISC systems make the compiler's job easy by offering complex instructions and addressing modes which closely match high-level language constructs. RISC designs, however, break those high-level language constructs into a series of simpler instructions. Each of the instructions runs much faster. However, unless the compiler is able to reduce the number of instructions, the performance advantage is diminished. Apogee's compilers are specifically designed with the RISC model in mind. Instead of focusing on proper selection of a complicated addressing mode, we focus on eliminating redundancies which result from the larger number of simpler instructions. Internally we represent the code much as it will eventually appear in the assembly file; the optimizations are directly applied to SPARC-like code. This is one of the advantages of the clean sheet design--we have no CISC baggage left over. Designed from the very start to efficiently and effectively handle RISC architectures, our compilers don't have to convert to or from CISC instructions at some point in the compiler. Q. Specifically what optimizations do you do? A. We have woven the standard "textbook" optimizations into more sophisticated optimizations which originally appeared in the supercomputer arena. Our proprietary technology permits us to take advantage of the strengths of classic "loop-sensitive" optimization as well as the "loop-insensitive" methods developed over the last decade. Among the standard optimizations, we perform constant folding and algebraic transformations, elimination of common subexpressions (both locally and globally), propagation of constants (both locally and globally), and elimination of copies and dead code (locally and globally). We do global backward and forward code motion in addition to extensive strength reduction and reassociation. We eliminate induction variables, unroll loops, and eliminate tail recursion where possible. We apply sophisticated memory reference analysis which allows us to maximize the allocation of variables to registers while minimizing memory traffic. Our register allocation uses a priority- based graph coloring algorithm, and we delay allocation of registers within a block until after reordering the instructions for maximum performance, thereby permitting greater freedom in matching the specific instruction sequence with the hardware's capabilities. This allows us to take maximum advantage of the complex pipelines of the latest SPARC processors. In addition to the above intra-procedural optimizations, we have a rich set of inter-procedural optimizations. We have extended our memory analysis to take account of which specific variables and which specific registers are read and/or modified across calls, and we fold called functions inline. Q. You have good results on the SPEC benchmarks, but what does that mean for my application? A. Together these optimizations allow us to achieve maximum performance on real applications, not just benchmarks. Certainly the optimizations are useful on benchmarks; we don't deny that. But the general nature of the algorithms we use are also able to recognize opportunities for optimization in real-world programs. We do not have to rely on clever schemes to recognize benchmarks or pattern match on particular input sequences to achieve our performance. Even as the code gets more complex, we are still able to optimize extremely well. Many of our competitors cannot make that claim. Q. I'm involved in numerical modeling. I want to get the most out of my workstation. Can you help? A. We think so. Many of the optimization techniques used by Apogee and Kuck & Associates were first applied in the supercomputing world, where performance has always been aggressively sought. The optimizations we perform are at their best in that environment; this is where we are especially strong against our competition. If you are seeking performance, we strongly encourage you to look at our compilers. Q. If I use Apogee's compilers, will I have to change my source code? A. Apogee has always striven to adhere to industry standards. We are committed to the open marketplace, and the standards which exist therein. Our compilers conform to the standards set by various government entities (eg. ANSI, ISO, MIL-STD), as well as de facto standards set by the marketplace (eg. VMS extensions, Kernighan and Ritchie dialect, pcc). If your source code also adheres to these standards, no changes should be required to begin using Apogee's compilers. Our sophisticated warning messages may help you find bugs which were undetected, however, so you may find that you want to make changes! Q. Will I need to change existing tools to use your compilers? A. Because Apogee conforms to all of the SPARC Architecture specifications, you can continue using all of your old tools with our compilers. We do, however, verify compatibility with a number of tools which, in our opinion, are outstanding products. These include the TotalView debugger from BBN, Sentinel from AIB Software, the gdb debugger from GNU, and the SNiFF+ development environment from takeFive, among others. Q. Can you tell me more about Apogee? A. Apogee Software is a privately held company specializing in the design, development, and production of highly optimizing compilers for RISC systems. The company founders have decades of experience in developing compilers, largely in the supercomputing and mainframe markets. The focus on performance in the RISC workstation marketplace has given us the opportunity to bring our sophisticated technology to a broader audience. Q. And Kuck & Associates? A. Kuck & Associates are experts in the field of automatic optimization tools. Their main product is a preprocessor which, by performing sophisticated data dependence analysis, is able to automatically uncover parallel, vector, and cache management opportunities within programs. After analyzing an application, KAP chooses the most efficient methods for executing the program on the SPARC architecture.